﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using log4net;

/// <summary>
/// Descripción breve de CategoriaTramiteCRN
/// </summary>
namespace Iudicium.Tramites.CRN
{
    public class CategoriaTramiteCRN
    {
        private static readonly ILog log = LogManager.GetLogger("LogFile");
        public CategoriaTramiteCRN()
        {
            //
            // TODO: Agregar aquí la lógica del constructor
            //
        }

        public static int InsertCategoriaTramite(CategoriaTramite objCategoriaTramite)
        {
            if (objCategoriaTramite == null)
            {
                throw new ArgumentException("La categoriatramite no puede ser nula.");
            }

            if (string.IsNullOrEmpty(objCategoriaTramite.Descripcion))
            {
                throw new ArgumentException("La descripcion de la categoriatramite no puede ser nula o vacia");
            }

            int? categoriaTramite = 0;

            CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter adapter =
                new CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter();

            adapter.Insert(ref categoriaTramite, objCategoriaTramite.Descripcion);

            if (categoriaTramite == null)
            {
                throw new Exception("La sentencia SQL se ejecuto correctamente pero no se genero la llave primaria");
            }

            return categoriaTramite.Value;
        }

        public static void UpdateCategoriaTramite(CategoriaTramite objCategoriaTramite)
        {
            if (objCategoriaTramite == null)
            {
                throw new ArgumentException("La categoriatramite no puede ser nula.");
            }
            if (objCategoriaTramite.CategoriaTramiteId <= 0)
            {
                throw new ArgumentException("CategoriatramiteId no puede ser menor o igual que cero.");
            }
            if (string.IsNullOrEmpty(objCategoriaTramite.Descripcion))
            {
                throw new ArgumentException("La descripcion de la categoriatramite no puede ser nula o vacia");
            }
            CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter adpater =
                   new CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter();

            adpater.Update(objCategoriaTramite.CategoriaTramiteId, objCategoriaTramite.Descripcion);

        }

        public static void DeleteCategoriaTramite(int CategoriaTramiteId)
        {
            if (CategoriaTramiteId <= 0)
            {
                throw new ArgumentException("categoriatramiteId no puede ser menor o igual que cero.");
            }
            CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter adpater =
                  new CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter();

            adpater.Delete(CategoriaTramiteId);

        }

        public static CategoriaTramite GetCategoriaTramiteById(int CategoriaTramiteId)
        {
            if (CategoriaTramiteId <= 0)
            {
                throw new ArgumentException("categoriatramiteId no puede ser menor o igual que cero.");
            }

            CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter adpater =
                new CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter();

            CategoriaTramiteDS.CategoriaTramiteDataTable tabla =
                adpater.GetCategoriaTramiteById(CategoriaTramiteId);

            if (tabla == null || tabla.Rows.Count == 0)
            {
                throw new Exception("No se pudo obtener la categoria tramite " + CategoriaTramiteId + " de la base de datos");
            }
            return ConstruirCategoriaTramite(tabla[0]);
        }

        public static CategoriaTramite GetCategoriaTramiteByTipo(int TipoTramiteId)
        {
            if (TipoTramiteId <= 0)
            {
                throw new ArgumentException("TipotramiteId no puede ser menor o igual que cero.");
            }

            CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter adpater =
                new CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter();

            CategoriaTramiteDS.CategoriaTramiteDataTable tabla =
                adpater.GetCategoriaByTipo(TipoTramiteId);

            if (tabla == null || tabla.Rows.Count == 0)
            {
                throw new Exception("No se pudo obtener la categoria tramite con tipotramite" + TipoTramiteId + " de la base de datos");
            }
            return ConstruirCategoriaTramite(tabla[0]);
        }


        public static List<CategoriaTramite> GetCategoriaTramiteBySearch(string parametro)
        {
            List<CategoriaTramite> lista = new List<CategoriaTramite>();

            CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter adpater =
                  new CategoriaTramiteDSTableAdapters.CategoriaTramiteTableAdapter();

            CategoriaTramiteDS.CategoriaTramiteDataTable tabla =
                adpater.GetCategoriaTramiteBySearch(parametro);

            if (tabla == null)
            {
                throw new Exception("No se pudo obtener resultados de la busqueda con el parametro " +
                    parametro +
                    " de la base de datos");
            }

            foreach (CategoriaTramiteDS.CategoriaTramiteRow row in tabla)
            {
                CategoriaTramite obj = ConstruirCategoriaTramite(row);
                if (obj != null)
                    lista.Add(obj);
            }
            return lista;
        }

        public static CategoriaTramite ConstruirCategoriaTramite(CategoriaTramiteDS.CategoriaTramiteRow row)
        {
            if (row == null)
                return null;
            return new CategoriaTramite(row.categoriaTramiteId, row.descripcion);

        }

      }
}
